@REM bat遍历文件

@REM 命令： for [参数] %%变量名 in (匹配符) do (执行的命令)
@REM 切记：每个指令之间必须以空格隔开，in 与 ( 之间有空格，do 与 ( 间也有空格，否则命令会无法成功执行；
@REM []：表示此项指令为可选
@REM [参数]：参数取值一共有四种： /d, /r, /l, /f，加上无参数，所以一共五种场景：
@REM - 无参：遍历当前路径的文件夹下的文件，但也可在(匹配符)中指定路径；
@REM - /d：遍历当前路径的文件夹下的文件夹，但也可在(匹配符)中指定路径；
@REM - /r [路径]：深度遍历指定路径下的所有文件，子目录中的文件也会被遍历到，如果没指定路径，默认当前路径；
@REM - /l ：当使用参数 /l 时，需结合(匹配符)一起使用，此时 () 括号内部的用法规则为：(start, step, end)，此时的 for 命令作用等同于 java 语言中的 for 语句；
@REM - /f ：用于解析文件中的内容；
@REM %%变量名：作用类似于 for(int i = 0; ; ) 中的 int i = 0，有些区别点的就是，批处理的 for 循环遍历每一个子项时，%%变量名 <=> 每个子项，即 &&变量名 已经是指向具体的每个子项了；
@REM (匹配符)：在 in 指令之后 () 括号里的内容可表示为通配符，用于按照指定的规则过滤文件夹下的文件，如 (*.txt) 表示遍历文件夹内所有以 .txt 结尾的文件；
@REM (执行的命令)：前面的指令就可以取到文件夹内指定的每个子项了，那么接下去要对每个子项如何操作，就在这里写，类似于 java 的 for 命令后的 {} 大括号的作用；

ECHO 无参：遍历当前目录下的所有文件
for %%i in (*) do ( echo %%i )

ECHO 无参指定路径：遍历在(匹配符)中指定路径下的以 .url 结尾的文件；
for %%i in (c:\softwares\VisualBat\*.url) do ( echo %%i )
ECHO 命令行直接单行输入：
for %i in (*.vhd) do ( echo %i )

ECHO 带参数 /d 指定路径：遍历指定目录下的所有文件夹，%%i 指向每个子文件夹的绝对路径；
for /d %%i in (c:\softwares\VisualBat\*) do ( echo %%i )

ECHO 带参数 /r ：深度遍历当前路径下所有以 .url 结尾的文件，因为是深度遍历，因此 %%i 指向文件的绝对路径；
for /r %%i in (*.url) do ( echo %%i )

ECHO 带参数 /l ：等效于 java 中的 for (int i = 1; i <= 5; i++)语句，起始值，递增或递减，终止值都可自行设置；
for /l %%i in (1, 1, 5) do ( echo %%i )

ECHO 带参数 /d /r：参数可结合使用，/d 表示遍历文件夹，/r 表示深度遍历，因此以上命令作用为深度遍历当前目录下的所有文件夹，包括子目录中的文件夹；
for /d /r %%i in (*) do ( echo %%i )

@REM 【文件特殊操作】
@REM 如果是在 for 命令中遍历了某个文件夹下的文件，那么此时可以通过一些特殊命令来获取这个文件的各种信息，示例：
@echo off
for %%i in (*.txt) do (
    echo %%i
    echo %%~fi
    echo %%~di
    echo %%~pi
    echo %%~ni
    echo %%~xi
    echo %%~ti
    echo %%~zi
)
@REM 解释： 在通过 for 命令遍历文件时，%%i 根据不同的 for 使用方式，内容也有所不同，在这种用法下，%%i 指向了当前目录下每个文件名，完整的文件名。那么，此时就可以通过一些特殊命令来取得文件的相关信息，比如：
@REM %%~fi  ：表示获取该文件的绝对路径信息
@REM %%~di  ：表示获取该文件所在的盘符
@REM %%~pi  ：表示获取该文件的路径，不包含盘符的信息
@REM %%~ni  ：表示获取该文件的文件名，不包含扩展名信息
@REM %%~xi  ：表示获取该文件的扩展名
@REM %%~ti  ：表示获取该文件的上次修改时间
@REM %%~zi  ：表示获取该文件的大小
@REM %%~nxi ：表示获取该文件的文件名和扩展名，不包含盘符以及路径信息

@REM https://www.cnblogs.com/dasusu/p/9058554.html
@REM https://www.cnblogs.com/utank/p/11798466.html


@REM @REM FOR 变量参照的替换已被增强。您现在可以使用下列选项语法:
@REM      %~I         - 删除任何引号(")，扩充 %I
@REM      %~fI        - 将 %I 扩充到一个完全合格的路径名
@REM      %~dI        - 仅将 %I 扩充到一个驱动器号
@REM      %~pI        - 仅将 %I 扩充到一个路径
@REM      %~nI        - 仅将 %I 扩充到一个文件名
@REM      %~xI        - 仅将 %I 扩充到一个文件扩展名
@REM      %~sI        - 扩充的路径只含有短名
@REM      %~aI        - 将 %I 扩充到文件的文件属性
@REM      %~tI        - 将 %I 扩充到文件的日期/时间
@REM      %~zI        - 将 %I 扩充到文件的大小
@REM      %~$PATH:I   - 查找列在路径环境变量的目录，并将 %I 扩充
@REM                    到找到的第一个完全合格的名称。如果环境变量名
@REM                    未被定义，或者没有找到文件，此组合键会扩充到
@REM                    空字符串

@REM 可以组合修饰符来得到多重结果:
@REM  %~dpI       - 仅将 %I 扩充到一个驱动器号和路径
@REM  %~nxI       - 仅将 %I 扩充到一个文件名和扩展名
@REM  %~fsI       - 仅将 %I 扩充到一个带有短名的完整路径名
@REM  %~dp$PATH:i - 查找列在路径环境变量的目录，并将 %I 扩充
@REM                到找到的第一个驱动器号和路径。 
@REM  %~ftzaI     - 将 %I 扩充到类似输出线路的 DIR

@REM https://blog.csdn.net/pkbaolong/article/details/51319951
